/*
 * energy.h
 *
 *      Author: Jerome RD Soine and Christoph A Brand
 *      Institution: Schwarz goup, Institute for Theoretical Physics, Heidelberg University, Germany
 */

#ifndef ENERGY_H_
#define ENERGY_H_

#include "../geometry/geomobject.h"
#include "../geometry/base/vertex.h"

#include <vector>
#include <iostream>

class Energy {

protected:
	GeomObject * g;
	bool calculateGradients,calculateEnergies;

public:
	Energy(GeomObject * G);
	virtual ~Energy(){};
	virtual double getEnergy() = 0;
	virtual Vertex getGradient(Vertex & v) = 0;

	GeomObject * getGeomObject() { return g; };

	virtual bool isCalculateGradients() { return calculateGradients; };
	virtual void setCalculateGradients(bool CALCULATE_GRADIENTS) { calculateGradients = CALCULATE_GRADIENTS;};
	virtual bool isCalculateEnergies() { return calculateEnergies; };
	virtual void setCalculateEnergies(bool CALCULATE_ENERGIES) { calculateEnergies = CALCULATE_ENERGIES; };
};

#endif /* ENERGY_H_ */
